<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class generateurTags extends cpGenerateur
{
	
	
	
	
	
	/// @name Administration
	//@{
	
	
	public function preparerModule($module)
	{

		# Vérification des permissions
		if(	$this->core->auth->verifierPermission('pages') &&
			($this->page->utilisateur_id == $this->core->auth->getUtilisateurID() ||
			 $this->core->auth->verifierPermission('toutesPages') )
		)
		{
			
			# Boutons d'action
			if($this->core->auth->verifierPermission('publierPage')) {
				$module->ajouterBoutonAction(__('Publier'), '#', 'boutonAction_publier');
			}
			$module->ajouterBoutonAction(__('Enregistrer comme brouillon'), '#', 'boutonAction_enregistrer');
			
			# Actions autorisées
			$module->setActionsAutorisees(
				'enregistrerPage',
				'publierPage',
				'restaurerPage'
			);
		}
		
		# Bouton d'action «Aperçu»
		$module->ajouterBoutonAction(__('Aperçu'), '#', 'boutonAction_apercu');
		
		$module->setCSS('modifierPage,modifierPage_tags');
		$module->setJavascript('modifierPage,cpConditionsPage,modifierPage_tags');
		
	}
	
	
	public function action_restaurerPage($module)
	{
		$this->page->restaurer();
		$module->messageOK(__('La page a été restaurée avec succès.'));
	}
	
	
	public function action_enregistrerPage($module)
	{

		if($this->page->page_id != $_POST['page_id']) {
			return;
		}
		
		# Début de la transaction
		$this->core->con->begin();
		
		try {

			# Curseur
			$cur = $this->core->con->openCursor($this->core->prefix.'temp_pages');
			
			# Propriétés communes à toutes les pages
			$this->adminProprietesEnregistrer($cur, $_POST, array('page_commentaires', 'affiche_meta','tags'));
			
			# Traiter le contenu
			$page_entete = $_POST['page_entete'];
			$page_entete_xhtml = '';
			$this->adminTraiterContenu($page_entete, $page_entete_xhtml, $cur->page_options['cp']['format']);
			$cur->page_entete		= $page_entete;
			$cur->page_entete_xhtml	= $page_entete_xhtml;
			
			# Autres propriétés
			$cur->page_titre		= $_POST['page_titre'];
			$page_options = $cur->page_options;			
			$page_options['tri'] = array('champ' => $_POST['tri_champ'], 'ordre' => $_POST['tri_ordre']);
			$page_options['affiche_extrait'] = (boolean) $_POST['affiche_extrait'];
			$page_options['liens_par_page'] = (integer) $_POST['liens_par_page'];
			$page_options['cp']['medias'] = $page->generateur->medias;
			$cur->page_options		= $page_options;
			
			# Enregistrer dans la base de données
			$this->page->enregistrer($cur);
			
			$module->messageOK(__('Le brouillon a été enregistré avec succès.'));
			
			# Fin de la transaction
			$this->core->con->commit();
		} catch(Exception $e) {
			$this->core->con->rollback();
			throw $e;
		}
		
	}
	
	public function action_publierPage($module)
	{
		
		# Permission nécessaire: publierPage
		$this->core->auth->verifierPermission('publierPage', true);
		
		# Enregistrer les modifications
		$this->action_enregistrerPage($module);
		
		# Publier la page
		$this->page->publier();
		
		$module->messageOK(__('La page a été publiée avec succès.'));
		
	}
	
	
	public function adminBody($module)
	{

		# Valeur des champs de formulaire
		$page_titre			= $this->page->page_titre;
		$page_entete		= $this->page->page_entete == '' ? 
			$this->page->page_entete_xhtml :
			$this->page->page_entete;
		$affiche_extrait	= $this->page->page_options['affiche_extrait'];
		$liens_par_page		= (integer) $this->page->page_options['liens_par_page'];
		$tri_champ			= $this->page->page_options['tri']['champ'];
		$tri_ordre			= $this->page->page_options['tri']['ordre'];

		# HTML de l'interface
		$html =
			'<form id="modifierPage"  method="post" action="index.php?module=modifierPage&page_id='.$this->page->page_id.'">'.
				form::hidden('page_id', (integer) $this->page->page_id).
				form::hidden('action', '').
				form::hidden('apercu', '').
				form::hidden('nonce', '').
				form::hidden('nonce_enregistrer', $this->core->genererNonce('enregistrerPage')).
				form::hidden('nonce_publier', $this->core->genererNonce('publierPage')).
				'<div id="modifierPage_gauche">'.
					'<div id="conteneurMessage">'.$module->afficherMessages().'</div>'.
					'<fieldset>'.
						'<legend>'.__('Liste de pages').'</legend>'.
						'<p>'.
							'<label for="trier_champ">'.__('Trier par').'</label>'.
							form::combo(
								'tri_champ', 											# Nom du champ
								array(													# Données
									__('Titre')					=> 'page_titre',
									__('URL')					=> 'page_url',
									__('Dossier')				=> 'cat_id',
									__('Date de création')		=> 'page_date',
									__('Date de modification')	=> 'page_date_modification'
								), 
								$tri_champ												# Valeur initiale
							).
							$module->combo(
								'tri_ordre',											# Nom du champ
								array(													# Données
									__('ordre croissant')	=> 'asc',
									__('ordre décroissant')	=> 'desc'
								), 
								$tri_ordre												# Valeur initiale
							).
						'</p>'.
						'<p>'.
							'<label for="page_titre">'.__('Afficher un extrait').'</label>'.
							$module->combo('affiche_extrait', array(__('Oui') => 1, __('Non') => 0), $affiche_extrait).
						'</p>'.
						'<p>'.
							'<label for="liens_par_page">'.__('Liens par page').'</label>'.
							$module->field('liens_par_page', 5, 5, $liens_par_page).
						'</p>'.
					'</fieldset>'.	
					'<p class="onTop">'.
						'<label for="page_titre">'.__('Titre').'</label>'.
						$module->field('page_titre', 40, 250, html::escapeHTML($page_titre)).
					'</p>'.
					'<p class="onTop">'.
						'<label for="page_entete">'.__('En-tête').'</label>'.
						$module->textArea('page_entete', 40, 20, html::escapeHTML($page_entete), 'tinymce').
					'</p>'.
				'</div>'.
				'<div id="modifierPage_droite">'.$this->adminProprietesHTML($module, array('page_commentaires', 'affiche_meta','tags')).'</div>'.
			'</form>';
		
		return $html;
		
	}
	
	
	public function curseurNouvellePage($cur)
	{
		
		parent::curseurNouvellePage($cur);
		
		$cur->page_commentaires = CP_COMMENTAIRES_DESACTIVES;
		$cur->page_options = array_merge($cur->page_options, array(
			'tri'			=> array('champ' => 'page_date', 'ordre' => 'desc'),
			'affiche_extrait' => true,
			'liens_par_page'=> 15
		));
		$cur->page_mots = implode(' ', text::splitWords(text::toUTF8(html_entity_decode(html::clean($cur->page_titre)))));
		
	}
	
	
	public function publier()
	{
		
		# Enregistrer la liste des médias
		$this->medias = $this->page->page_options['cp']['medias'];
		$this->adminEnregistrerMediasPage();
		
		# Mots
		$mots = html::clean($this->page->page_titre.' '.$this->page->page_entete_xhtml);
		$this->page->page_mots	= implode(' ', text::splitWords(text::toUTF8(html_entity_decode($mots))));
		
		# Publier la page
		parent::publier();
		
	}
	//@}
	
	
	
	
	
	/// @name Public
	//@{
	
	
	protected $mode;
	protected $tag;
	
	
	public function initPublic()
	{
		
		parent::initPublic();
		
		# Affichage des pages correspondant à un tag
		if($_GET[1] != '')
		{
			
			$this->mode = 'pages';
			$this->tag = $this->core->site->getTags(array('tag_texte' => $_GET[1], 'page_enligne' => true, 'page_langue' => $this->page->page_langue));
			
			if($this->tag->isEmpty()) {
				cpPublic::erreur404();
			}
			
			$this->p = $_GET['page'];
			$this->p = is_numeric($this->p) ? (integer) $this->p : 1;
			
		}
		# Affichage de la liste des tags
		else {
			$this->mode = 'tags';
		}
		
	}
	
	
	public function public_titre()
	{
		switch($this->mode):
		
			case pages:
				return __('Tag:').' '.$this->tag->tag_texte; 
			break;
			
			default:
				return $this->page->page_titre;
			break;
			
		endswitch;
		
	}
	
	
	public function public_contenu()
	{

		switch($this->mode):
		
		
			# Affichage des pages correspondant à un tag
			case pages:

				$url_retour = !$this->core->public->apercu ?
					CP_URL_PUBLIQUE_RELATIVE.$this->page->page_url :
					CP_URL_PUBLIQUE_RELATIVE.$this->page->page_url.'?apercu=1';
				
				$html =
				'<p><a href="'.$url_retour.'">'.__('&#171;Retour à la liste des tags').'</a></p>';
				
				$params = array(
					'page_statut'	=> CP_STATUT_ONLINE,
					'tag'			=> $this->tag->tag_texte
				);
				
				$count = $this->core->site->getPages($params, CP_GET_COMPTEUR);
				
				$pager = new pager($this->p,$count->f(0),$this->page->page_options['liens_par_page'],10);
				$pager->html_prev = __('&#171;préc.');
				$pager->html_next = __('suiv.&#187;');
				$pager->var_page = 'page';
				
				$params['limit'] = array($pager->index_start,$this->page->page_options['liens_par_page']);
				$pages = $this->core->site->getPages($params, CP_GET_STATIC);
				
				if($pages->isEmpty()) {
					return $html.'<p class="liens-aucun-resultat">'.__('Pas de page').'</p>';
				}
				
				# Avec extrait
				if($this->page->page_options['affiche_extrait'])
				{
					$html.=
					'<div class="liens-liste-extrait">';
					
					while($pages->fetch())
					{
						$html.= $pages->public_apercu(true, false);							
					}
					
					$html.=
					'</div>';
					
				}
				# Sans extrait
				else
				{
					
					$html.=
					'<ul class="liens-liste">';
					
					while($pages->fetch())
					{
						$html.= $pages->public_apercu(false);
					}
					
					$html.=
					'</ul>';
					
				}
		
				$html.=
				'<p class="pages">'.__('Page(s) :').' '.$pager->getLinks().'</p>';		
				
				
				return $html;
				
			break;
		
		
			# Affichage de la liste des tags
			case tags:
				
				$tags = $this->core->site->getTags(array('page_enligne' => true, 'page_langue' => $this->page->page_langue, 'nb' => true));
				
				if($tags->isEmpty()) {
					return '<p>'.__('Pas de tag').'</p>';
				}
				
				$max = 1;
				while($tags->fetch()) {
					if($tags->nb > $max) {
						$max = (integer) $tags->nb;
					}
				}
				
				$html =
				'<ul class="tags-liste-page">';
				
				while($tags->fetch())
				{
					
					$apercu = $this->core->public->apercu ? '?apercu=1' : '';
					
					$utilisation = ceil(($tags->nb / $max)*10);
					$html.=
					'<li class="tag_'.$utilisation.'">'.
						'<a href="'.CP_URL_PUBLIQUE_RELATIVE.$this->page->page_url.','.rawurlencode($tags->tag_texte).$apercu.'">'.
							html::escapeHTML($tags->tag_texte).
						'</a>'.
					'</li> ';
				}
				
				$html.=
				'</ul>';
				
				return $html;
				
			break;
				
		
		endswitch;
		
	}
	
	
	public function affiche_meta()
	{
		return false;
	}
	
	
	public function affiche_tags()
	{
		return false;
	}
	//@}
	
	
}

?>